//
//  main.m
//  03-集合
//
//  Created by dllo on 16/7/6.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 1.数组
        // 数组:可变数组 NSMutableArray,不可变数组 NSArray
        // 数组主要存放有序的集合类型,并且可以通过下标取值.
        // 注意:数组里存放的元素只能存放对象类型
        // 不可变数组只能取值
        // 可变数组可以进行增删改查
        // 2初始化(不可变)数组
        // (1)初始化方法 initWithObjects 后面填入的参数一定是对象类型
        // 可变参数 C语言链表(后面讲)
        // 顺序填入你需要的元素
        // 初始化结束以nil为标准,
        NSArray *array = [[NSArray alloc] initWithObjects:@"sss",@"fff",@"fafef",nil];
        // (2)构造器方法
        NSArray *array1 = [NSArray arrayWithObjects:@"1",@"2",@"3", nil];
        NSLog(@"%@",array);
        // (3)字面量 同NSString @"",NSNumber @(),NSArray @[]
//        NSObject *objc = nil;
//        NSArray *myArray = @[@"666",objc,@"999",@"qwer1234"];
//        NSLog(@"%@",myArray);
        // 三种初始化方式,推荐使用字面量
        // 字面量可以识别对象是否为空值,但是一般的初始化不可以
        // 如果为空,字面量会崩溃,并且告诉你reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1]'但是初始化方法会识别nil为结束,不会报告异常,造成数据丢失
        // (3)取值相关
        // 1>count 取得数组的元素个数
        NSLog(@"%ld",array1.count);
        // 2>数组中的数值,通过下标
        NSString *str = [array objectAtIndex:2];
        // 3>语法糖 取值方式 快捷取值
        NSString *str1 = array1[0];
        // 4>根据值取出对应的下标
        NSUInteger *indexOfObject = [array1 indexOfObject:@"3"];
        NSLog(@"%ld",indexOfObject);
        // 5>判断对象是否存在于数组中
        BOOL isHaveObject = [array1 containsObject:@"1"];
        NSLog(@"%@",isHaveObject ? @"YES" : @"NO");
        // 6>取数组中第0位的元素,或者取数组中最后一位元素,如果数组为空,返回的对象为空,并且不会崩溃
        [array firstObject];
        [array lastObject];
        // (4)不可变数组改变元素
        // 会生成新的数组,不会在元数组基础上修改
        // 1>数组添加一个新的Object
        NSArray *array2 = [array1 arrayByAddingObject:@"4"];
        NSLog(@"%@",array2);
        // 2> 数组添加另外一个数组中的所有元素
        NSArray *array3 = [array1 arrayByAddingObjectsFromArray:array];
        NSLog(@"%@",array3);
        // 可变数组
//        NSMutableArray
        // 1>初始化方法,同不可变数组的初始化
        // 字面量的创建方法,不推荐使用,只能使用初始化方法和便利构造器
        NSMutableArray *mutableArray = @[].mutableCopy;
        // 2>取值方式和不可变数组一样
        // 3>可变数组的改变
        // 数组中添加元素 addObject
        [mutableArray addObject:@"123"];
        // 数组中插入元素 insertObject
        [mutableArray insertObject:@"drghfde" atIndex:0];
        // 移除
        [mutableArray removeObjectAtIndex:0];
//        [mutableArray removeAllObjects];
//        [mutableArray removeLastObject];
        // 替换 (使用时数组不能为空)
        [mutableArray replaceObjectAtIndex:0 withObject:@"wangnima"];
        // 可变和不可变的区别
        // 1.可变是可以修改的,但不可变不可以
        // 2.不可变调用改变的方发时会生成新的对象,有返回值;可变调用方法时,在对象的本身进行修改,不会生成新的对象,无返回值
        // 3.可变继承于不可变
        // 4.将字符串根据某个子串,截成数组,子串消失
        // 根据那个字串截取那个字串就会消失
        NSString *url = [NSString stringWithFormat:@"www.lanou3g.com"];
        NSArray *arr = [url componentsSeparatedByString:@"."];
        NSLog(@"%@",arr);
        // 5.根据某个字符串把数组拼接成一个字符串
        NSArray *arr1 = @[@"name",@"is",@"wangtnima"];
        NSString *newStr = [arr1 componentsJoinedByString:@"------"];
        NSLog(@"%@",newStr);
        
        
    }
    return 0;
}
